body {
  // Remove default margin.
  margin: 0;

  // Optimize for the retina screen
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

// Address `[hidden]` styling not present in IE 10.
// Hide the `template` element in IE 10/11, Safari, and Firefox < 22.
[hidden],
template {
  display: none;
}

// Links
// ==========================================================================

a {
  color: var(--rs-text-link);
  text-decoration: none;
  background-color: transparent;

  &:hover,
  &:focus {
    outline: 0;
    color: var(--rs-text-link-hover);
    text-decoration: var(--rs-link-hover-decoration);
  }

  &:active {
    outline: 0;
    color: var(--rs-text-link-active);
    text-decoration: var(--rs-link-active-decoration);
  }
}

// Text-level semantics
// ==========================================================================

// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
b,
strong {
  font-weight: bold;
}

// Prevent `sub` and `sup` affecting `line-height` in all browsers.
sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}

sup {
  top: -0.5em;
}

sub {
  bottom: -0.25em;
}

// Embedded content
// ==========================================================================

// Correct overflow not hidden in IE 10/11.
svg:not(:root) {
  overflow: hidden;
}

// Address differences between Firefox and other browsers.
hr {
  box-sizing: content-box;
  height: 0;
  margin-block: var(--rs-line-height-base);
  border: 0;
  border-top: 1px solid var(--rs-divider-border);
}

// Contain overflow in all browsers.
pre {
  overflow: auto;
}

// Forms
// ==========================================================================

// Known limitation: by default, Chrome and Safari on OS X allow very limited
// styling of `select`, unless a `border` property is set.

// 1. Correct color not being inherited.
//    Known issue: affects color of disabled elements.
// 2. Correct font properties not being inherited.
// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
button,
input,
optgroup,
select,
textarea {
  color: inherit; // 1
  font: inherit; // 2
  margin: 0; // 3
}

button {
  // Address `overflow` set to `hidden` in IE 10/11.
  overflow: visible;

  // Remove border radius in Chrome 62+
  border-radius: var(--rs-radius-none);
}

// Address inconsistent `text-transform` inheritance for `button` and `select`.
// All other form control elements do not inherit `text-transform` values.
// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
// Correct `select` style inheritance in Firefox.
button,
select {
  text-transform: none;
}

// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
//    and `video` controls.
// 2. Correct inability to style clickable `input` types in iOS.
// 3. Improve usability and consistency of cursor style between image-type
//    `input` and others.
button,
input[type='reset'],
input[type='submit'] {
  appearance: auto;
  cursor: pointer;
}

// Re-set default cursor for disabled elements.
button[disabled],
html input[disabled] {
  cursor: not-allowed;
}

// Remove inner padding and border in Firefox 4+.
button::-moz-focus-inner,
input::-moz-focus-inner {
  border: 0;
  padding: 0;
}

// Address Firefox 4+ setting `line-height` on `input` using `!important` in
// the UA stylesheet.
input {
  line-height: normal;
}

// It's recommended that you don't attempt to style these elements.
// Firefox's implementation doesn't respect box-sizing, padding, or width.
// 1. Address box sizing set to `content-box` in IE 10.
// 2. Remove excess padding in IE 10.
input[type='checkbox'],
input[type='radio'] {
  box-sizing: border-box; // 1
  padding: 0; // 2
}

// Fix the cursor style for Chrome's increment/decrement buttons. For certain
// `font-size` values of the `input`, it causes the cursor style of the
// decrement button to change from `default` to `text`.
input[type='number']::-webkit-inner-spin-button,
input[type='number']::-webkit-outer-spin-button {
  height: auto;
}

// Remove default vertical scrollbar in IE 10/11.
textarea {
  overflow: auto;
}

// Tables
// ==========================================================================

// Remove most spacing between table cells.
table {
  border-collapse: collapse;
  border-spacing: 0;
}

td,
th {
  padding: 0;
}

// Remove tabIndex component outline
[tabindex='-1'] {
  outline: none;
}

// Remove Default button Style
button,
input[type='button'],
input[type='submit'],
input[type='reset'] {
  border-width: 0;
}

// Remove IE10's "clear field" X button on certain inputs
input::-ms-clear {
  display: none;
}

// Remove File button Style
input[type='file']::-webkit-file-upload-button,
input[type='file']::-ms-browse {
  border-width: 0;
  background: transparent;
  color: currentcolor;
}

// Reset fonts for relevant elements
input,
button,
select,
textarea {
  font-family: inherit;
  font-size: inherit;
  line-height: inherit;
}

// Images
img {
  vertical-align: middle;

  // Remove border when inside `a` element in IE 10.
  border: 0;
}

[role='button'] {
  cursor: pointer;
}

// Typography
// --------------------------------------------------

// Headings
// -------------------------

h1,
h2,
h3,
h4,
h5,
h6 {
  font-family: var(--rs-heading-font-family);
  font-weight: var(--rs-heading-font-weight);
  color: var(--rs-heading-color);
}

h1 {
  font-size: var(--rs-heading-h1-font-size);
  line-height: var(--rs-heading-h1-line-height);
}

h2 {
  font-size: var(--rs-heading-h2-font-size);
  line-height: var(--rs-heading-h2-line-height);
}

h3 {
  font-size: var(--rs-heading-h3-font-size);
  line-height: var(--rs-heading-h3-line-height);
}

h4 {
  font-size: var(--rs-heading-h4-font-size);
  line-height: var(--rs-heading-h4-line-height);
}

h5 {
  font-size: var(--rs-heading-h5-font-size);
  line-height: var(--rs-heading-h5-line-height);
}

h6 {
  font-size: var(--rs-heading-h6-font-size);
  line-height: var(--rs-heading-h6-line-height);
}

// Emphasis & misc
// -------------------------

// Ex: (12px small font / 14px base font) * 100% = about 85%
small {
  font-size: var(--rs-font-size-xs);
}

h1 small,
h2 small,
h3 small,
h4 small,
h5 small,
h6 small {
  font-weight: normal;
  line-height: 1;
  color: var(--rs-text-disabled);
}

mark {
  background-color: var(--rs-bg-warning);
  padding: 0.2em;
  font-weight: bolder;
}

// Lists
// -------------------------

// Unordered and Ordered lists
ul,
ol {
  margin-top: 0;
  margin-bottom: calc(var(--rs-line-height-base) / 2);

  ul,
  ol {
    margin-bottom: 0;
  }
}

// Description Lists
dl {
  margin-top: 0; // Remove browser default
  margin-bottom: calc(var(--rs-line-height-base) / 2);
}

dt,
dd {
  line-height: var(--rs-line-height-md);
}

dt {
  font-weight: bold;
}

dd {
  margin-inline-start: 0; // Undo browser default
  margin-bottom: calc(var(--rs-line-height-base) / 2);
}
